Although computers were once isolated and had minimal or little interaction with other computers, today's computers interact with a wide variety of other computers through communications networks, such as Local Area Networks (LANs) and Wide Area Networks (WANs). With the wide-spread growth of the INTERNET™, connectivity between computers is becoming more important and has opened up many new applications and technologies. The growth of large-scale networks, and the wide-spread availability of low-cost personal computers, has fundamentally changed the way that many people work, interact, communicate, and play.
One increasing popular form of networking may generally be referred to as virtual computing systems, which can use protocols such as Remote Desktop Protocol (RDP), Independent Computing Architecture (ICA), and others to share a desktop and other applications with a remote client over a remote session. Such computing systems typically transmit the keyboard presses and mouse clicks or selections from the client to a server, relaying the screen updates back in the other direction over a network connection (e.g., the INTERNET). As such, the user has the experience as if their machine is operating as part of a LAN, when in reality the client device is only sent screenshots of the applications as they appear on the server side.
To reduce the often limited network bandwidth required for a session, the server may compress an image (frequently, the unit of images is a tile, which comprises a subset of a frame) before sending the image across the network, and the client then performs the corresponding decompression operation after receiving the image. These images are generated on the server as the remote session progresses, so the compression must occur at runtime. Additionally, since the latency of a session is a major factor in the user experience, such compression and decompression must be performed quickly relative to the time savings of sending a smaller compressed image as opposed to a larger uncompressed image. Given these requirements, present runtime classification systems primarily use very constrained criteria to decide on how to encode image data, such as those based on basic content type and/or those that take a running average of network capacity. Both of these techniques may be used for a single type of image, such as text, or high-resolution video. These systems have only a single codec in use at any one time, and the time required to switch codecs takes so long that it negatively impacts the responsiveness of the RDP session.